//#include <iostream>
//#include <vector>
//using namespace std;
//const int N = 1e5 + 10;
//bool st[N];
//vector<int> edges[N];
//void dfs(int u)
//{
//	cout << u << " ";
//	st[u] = true;
//	for (auto m : edges[u])
//	{
//		if (!st[m])
//		{
//			dfs(m);
//		}
//	}
//}
//int main()
//{
//	int n;
//	cin >> n;
//	for (int i = 1;i < n;i++)
//	{
//		int a, b;cin >> a >> b;
//		edges[a].push_back(b);
//		edges[b].push_back(a);
//
//	}
//	dfs(1);
//	return 0;
//}
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
int l[N];
int r[N];
void dfs1(int u)
{
	cout << u << " ";
	if (l[u])dfs1(l[u]);
	if (r[u])dfs1(r[u]);
}
void dfs2(int u)
{
	if (l[u])dfs2(l[u]);
	cout << u << " ";
	if (r[u])dfs2(r[u]);
}
void dfs3(int u)
{
	if (l[u])dfs3(l[u]);
	if (r[u])dfs3(r[u]);
	cout << u << " ";
}
int main()
{
	int n;
	cin >> n;
	for (int i = 1;i < n;i++)
	{
		cin >> l[i] >> r[i];
	}
	dfs1(1);
	dfs2(1);
	dfs3(1);
	return 0;
}